/*
* 
* Fichier source projet intel Acceler8 sous license GNU GPL v3.
* Voir http://www.gnu.org/copyleft/gpl.html pour plus d'informations
* La license est egalement disponible dans le repertoire /doc
* 
* Cree le : mardi 08 novembre 2011 à 17 : 44.
* Auteurs : Axel MOINET et Arnaud DURAND.
* 
* Nom de fichier : lecturefichier.cpp
* Chemin du fichier : src/classes/lecturefichier/lecturefichier.cpp
* 
* Description : Classe d'implementation de lecture du fichier.
* 			Implemente un pipeline de lecture via les libraries tbb.
* 
*/

#include "lecturefichier.h"

lectureFichier::lectureFichier() {
	//Erreur : tentative d'instanciation sans fichier d'entrée.
}

lectureFichier::lectureFichier(char *filepath, size_t p_nbJetons, threadPrincipal *p_threadPrincipal) {
	if(filepath == NULL || p_threadPrincipal == NULL) {
		//renvoyer un code d'erreur et positionner un flag d'erreur
	}
	else {
		this->nbJetons = p_nbJetons;
		this->reader = new readLine(filepath);
		this->thread = p_threadPrincipal;
		this->makePipeline();
	}
}

lectureFichier::~lectureFichier() {
	if(this->reader != NULL)
		delete this->reader;
	if(this->filtreConversion != NULL)
		delete this->filtreConversion;
	if(this->filtreLecture != NULL)
		delete this->filtreLecture;
}

int lectureFichier::makePipeline() {
	this->filtreLecture = new filtreLectureLigne(this->reader);
	this->pipelineLecture.add_filter(*(this->filtreLecture));

	this->filtreConversion = new filtreConvertToInt(this->thread);
	this->pipelineLecture.add_filter(*(this->filtreConversion));
	return 0;
}

int lectureFichier::launchPipeline() {
	this->pipelineLecture.run(this->nbJetons);
	this->thread->setEndFileFlag();
	return 0;
}

int lectureFichier::clearPipeline() {
	this->pipelineLecture.clear();
	return 0;
}

int lectureFichier::makeAndRunPipeline() {
	this->filtreLecture = new filtreLectureLigne(this->reader);
	this->pipelineLecture.add_filter(*(this->filtreLecture));
	this->pipelineLecture.run(this->nbJetons);
	this->pipelineLecture.clear();
	return 0;
}
